/**
 * 
 */
package beans;

import java.util.HashMap;
import java.util.Iterator;

/**
 * @author faubry
 * 
 */
public class Panier {
	private HashMap<Produit, Integer> contenu;
	private double prixTotal;

	/**
	 * 
	 */
	public Panier() {
		super();
		this.contenu = new HashMap<Produit, Integer>();
		this.prixTotal = prixTotal();
	}

	/**
	 * Ajout un article au panier et met à jour le total
	 * 
	 * @param produit
	 * @param quantite
	 */
	public void add(Produit produit, Integer quantite) {
		// on vérifie que produit n'est pas null
		if (produit != null) {
			int quantiteTotale = quantite;
			// si produit déjà dans le panier, récupération et ajout de sa
			// quantité
			if (contenu.containsKey(produit)) {
				quantiteTotale += contenu.get(produit).intValue();
			}
			this.contenu.put(produit, quantiteTotale);

			// recalcul du total
			this.prixTotal = prixTotal();
		}
	}

	/**
	 * retire un type d'article du panier et met à jour le total
	 * 
	 * @param produit
	 * @param quantite
	 */
	public void remove(Produit produit) {
		if (contenu.containsKey(produit)) {
			this.contenu.remove(produit);
		}
		// recalcul du total
		this.prixTotal = prixTotal();
	}

	/**
	 * Vide le panier
	 */
	public void empty() {
		contenu.clear();
		// recalcul du total
		this.prixTotal = prixTotal();
	}

	/**
	 * @return le prix total du panier
	 */
	private double prixTotal() {
		double total = 0.0d;

		if (!contenu.isEmpty()) {
			for (Iterator itPan = contenu.keySet().iterator(); itPan.hasNext();) {
				Produit p = (Produit) itPan.next();
				total += p.getPrice() * contenu.get(p).doubleValue();
			}
		}
		return total;
	}

	/**
	 * @return the panier
	 */
	public HashMap<Produit, Integer> getContenu() {
		return contenu;
	}

	/**
	 * @param panier
	 *            the panier to set
	 */
	public void setContenu(HashMap<Produit, Integer> panier) {
		this.contenu = panier;
	}

	/**
	 * @return the prixTotal
	 */
	public double getPrixTotal() {
		return prixTotal;
	}

	/**
	 * @param prixTotal
	 *            the prixTotal to set
	 */
	public void setPrixTotal(double prixTotal) {
		this.prixTotal = prixTotal;
	}

}
